const { spawn } = require('child_process');
const colors = {
  reset: '\x1b[0m',
  green: '\x1b[32m',
  red: '\x1b[31m',
  yellow: '\x1b[33m',
  blue: '\x1b[34m',
  cyan: '\x1b[36m'
};

console.log(`${colors.cyan}🚀 启动工厂计时器后端服务...${colors.reset}\n`);

// 启动 NestJS 开发服务器
const nestProcess = spawn('pnpm', ['run', 'start:dev'], { 
  stdio: 'pipe',
  shell: true
});

// 监听输出
nestProcess.stdout.on('data', (data) => {
  const output = data.toString();
  
  // 检测成功启动消息
  if (output.includes('Nest application successfully started')) {
    console.log(`${colors.green}✅ 后端服务启动成功!${colors.reset}`);
    
    // 提取端口信息
    const portMatch = output.match(/http:\/\/localhost:(\d+)/);
    if (portMatch) {
      const port = portMatch[1];
      console.log(`${colors.blue}🌐 服务地址: http://localhost:${port}${colors.reset}`);
      console.log(`${colors.green}🩺 健康检查: http://localhost:${port}/${colors.reset}`);
    }
  }
  
  // 显示所有输出
  process.stdout.write(output);
});

// 监听错误
nestProcess.stderr.on('data', (data) => {
  const errorOutput = data.toString();
  
  // 检测数据库连接错误
  if (errorOutput.includes('connect ECONNREFUSED') || errorOutput.includes('Unknown database')) {
    console.log(`\n${colors.red}❌ 数据库连接失败!${colors.reset}`);
    console.log(`${colors.yellow}💡 请检查:${colors.reset}`);
    console.log(`${colors.yellow}   1. MySQL服务是否启动${colors.reset}`);
    console.log(`${colors.yellow}   2. 数据库 factory_timer 是否存在${colors.reset}`);
    console.log(`${colors.yellow}   3. 用户名/密码是否正确${colors.reset}`);
  }
  
  process.stderr.write(errorOutput);
});

// 处理进程退出
nestProcess.on('close', (code) => {
  if (code !== 0) {
    console.log(`\n${colors.red}💥 服务异常退出，代码: ${code}${colors.reset}`);
  }
});

// 优雅退出
process.on('SIGINT', () => {
  console.log(`\n${colors.yellow}🛑 正在停止服务...${colors.reset}`);
  nestProcess.kill('SIGINT');
  process.exit(0);
});